﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using POCOS;
using DAL;
using BLL.Interfaces;
using GUI.Models;
using WebMatrix.WebData;
using GUI.Infrastructure;
using System.Web.SessionState;

namespace GUI.Controllers
{
    [SessionState(SessionStateBehavior.Required)]
    public class AuteurController : Controller
    {
        private AuteurContext db = new AuteurContext();
        private IAuteurServices _auteurServices ;
        public AuteurController()
        {

        }
        //constructor
        public AuteurController(IAuteurServices AuteurServices)
        {
            this._auteurServices = AuteurServices; 
        }
        //
        // GET: /Auteur/
       

        public ActionResult Index()
        {
              int userId = Convert.ToInt32(Session["UserId"]);

              var auteur = _auteurServices.GetAuteurById(userId);


              return View(auteur);

        }


        public ActionResult ListAuteur()
        {
            var auteur = _auteurServices.GetAuteur().ToList();
            return View(auteur);
        }


          
   
        //
        //Get :Auteur Json Details
       
        public PartialViewResult AuteurDetails()
        {
            int id = WebSecurity.CurrentUserId;

        var auteur=    _auteurServices.Find(id);
            
        if (auteur == null)
        {

            return ViewBag.message = "not found";
        }
        return PartialView("auteur",auteur);
        }
        //
        // GET: /Auteur/Details/5


      

        public ActionResult Details(int id)
        {
            Auteur auteur = db.Auteurs.Find(id);
            if (auteur == null)
            {
                return HttpNotFound();
            }
            return View(auteur);
        }

        //
        // GET: /Auteur/Create



        public ActionResult Create(string set5000544366auto)
        {

            Session["userId"] = IntExtensions.Decode(set5000544366auto);
            var userid = IntExtensions.Decode(set5000544366auto);
            int decodeme = Convert.ToInt32(Session["userId"]);
            AuteurModel model = new AuteurModel();
             int decodeUP =Convert.ToInt32( IntExtensions.Decode(set5000544366auto));
            //get the @mail for the userId
             string vend =( from item in db.UserProfiles
                           where item.UserId == decodeUP
                             select item).First().Mail;
           
             model.Adressmail = vend;
             model.UserProfileId = decodeme;

               return View(model);
        }

        //
        // POST: /Auteur/Create

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(AuteurModel Modelauteur)
        {
            if (Modelauteur != null)
            {
                Auteur auteur = new Auteur();
                auteur.Id = Modelauteur.Id;
                auteur.Name=Modelauteur.Name;
                 auteur.Lastname=Modelauteur.Lastname;
                 auteur.Adressmail = Modelauteur.Lastname;
                 auteur.Profil = Modelauteur.Profil;
                 auteur.UserProfileId = Modelauteur.UserProfileId;
              


                _auteurServices.CreateAuteur(auteur);
                _auteurServices.SaveAuteur();

                return RedirectToAction("Index", "Articles", new { id = IntExtensions.Encode((Modelauteur.Id).ToString()) });
            }

            return View(Modelauteur);
        }

        //
        // GET: /Auteur/Edit/5

        public ActionResult Edit(int id = 0)
        {
            Auteur auteur = db.Auteurs.Find(id);
            if (auteur == null)
            {
                return HttpNotFound();
            }
            return View(auteur);
        }

        //
        // POST: /Auteur/Edit/5

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(Auteur auteur)
        {
            if (ModelState.IsValid)
            {
                db.Entry(auteur).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(auteur);
        }

        //
        // GET: /Auteur/Delete/5

        public ActionResult Delete(int id = 0)
        {
            Auteur auteur = db.Auteurs.Find(id);
            if (auteur == null)
            {
                return HttpNotFound();
            }
            return View(auteur);
        }

        //
        // POST: /Auteur/Delete/5

        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            Auteur auteur = db.Auteurs.Find(id);
            db.Auteurs.Remove(auteur);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

    



        [HttpPost]
        public JsonResult AddUser(Auteur auteur)
        {
          
           
            if (ModelState.IsValid)
            {
             

                _auteurServices.CreateAuteur(auteur);
                return Json(new { Status = "Success" }, JsonRequestBehavior.AllowGet);
           
            }
           
                return Json(new { Status = "Failed" });

        }


        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}